package edu.pe.cayetano.model.bo;

import org.apache.commons.beanutils.DynaBean;

import ws.synopsis.frmwrk.common.BResult;
import edu.pe.cayetano.dao.ModuloDAO;
import edu.pe.cayetano.dao.OperacionesComunesDAO;
import edu.pe.cayetano.framework.BusinessException;
import edu.pe.cayetano.framework.Configuration;
import edu.pe.cayetano.seccd.constantes.ConstantesSECCD;
import edu.pe.cayetano.util.Utilitario;

public class ModuloBO extends BaseBO{

	private	String		schema			= Configuration.getSchemaDB();


	public BResult listarModulo() throws BusinessException{
		BResult 				retSalida		= null;
		StringBuffer 			query 			= new StringBuffer(); 
		OperacionesComunesDAO	operacionesDAO	= null;
		try{
			conectar();
			operacionesDAO	 	= new OperacionesComunesDAO(conn);
			DynaBean dyna = Utilitario.seteaDynaBeanListadoTabla(null,null,null);
		    query = estableceQuery(dyna);
			retSalida 	= operacionesDAO.listado(query);
		}catch(Exception e){
			retSalida = new BResult();
			retSalida.setCode(-1);
			retSalida.setMessage("[ModuloBO] error en metodo listarModulo generado por:"+e.getMessage());
		}finally{
			try{
				desconectar();
			}catch(Exception e){
				retSalida = new BResult();
				retSalida.setCode(-1);
				retSalida.setMessage("[ModuloBO] error en metodo listarModulo generador po:"+e.getMessage());
			}
		}
		return retSalida;
	}
	
	public StringBuffer estableceQuery(DynaBean dyna){
		StringBuffer 	query 		= new StringBuffer();
		String 			campo		= Utilitario.getPropertyDynaBean(dyna, "optCampo");
		String 			criterio	= Utilitario.getPropertyDynaBean(dyna, "criterio");
		String 			operacion	= Utilitario.getPropertyDynaBean(dyna, "operacion");
		String 			codigo		= Utilitario.getPropertyDynaBean(dyna, "codigo"); 

		if(ConstantesSECCD.OPERACION_BUSQUEDA.equalsIgnoreCase(operacion)&&operacion!=null){
			if(ConstantesSECCD.CRITERIO_TODOS.equalsIgnoreCase(campo)&&campo!=null){
				query.append(" SELECT COD_MODULO,NOMBRE,PAGINA,ORDEN,TIPO "); 
				query.append(" FROM "+schema+"MODULO ");
				System.out.println("nilada:1-1");
			}
			else{
				query.append(" SELECT COD_MODULO,NOMBRE,PAGINA,ORDEN,TIPO "); 
				query.append(" FROM "+schema+"MODULO ");
				query.append(" WHERE UPPER("+campo+") LIKE '%"+criterio.toUpperCase()+"%'");
				System.out.println("nilada:1-2");
			}
		}
		if(ConstantesSECCD.OPERACION_LISTADO.equalsIgnoreCase(operacion)&&operacion!=null){
			query.append(" SELECT COD_MODULO,NOMBRE,PAGINA,ORDEN,TIPO "); 
			query.append(" FROM "+schema+"MODULO ");
				System.out.println("nilada:1-3");
		}
		if(ConstantesSECCD.OPERACION_BUSQUEDA_ESPECIFICA.equalsIgnoreCase(operacion)){
			query.append(" SELECT COD_MODULO,NOMBRE,PAGINA,ORDEN,TIPO "); 
			query.append(" FROM "+schema+"MODULO ");
			query.append(" WHERE A.COD_USUARIO="+codigo);
			System.out.println("nilada:1-4");
		}
		System.out.println("[ModuloBO]query en estableceQuery :"+query.toString());
		return query;
	}
	
	
	public BResult getModulos() throws BusinessException{
		BResult 				retSalida		= null;
		StringBuffer 			query 			= new StringBuffer(); 
		ModuloDAO				moduloDAO		= null;
		try{
			conectar();
			moduloDAO	 	= new ModuloDAO(conn);
			DynaBean dyna = Utilitario.seteaDynaBeanListadoTabla(null,null,null);
		    query = estableceQuery(dyna);
			retSalida 	= moduloDAO.getModulos(query);
		}catch(Exception e){
			retSalida = new BResult();
			retSalida.setCode(-1);
			retSalida.setMessage("[ModuloBO] error en metodo listarModulo generado por:"+e.getMessage());
		}finally{
			try{
				desconectar();
			}catch(Exception e){
				retSalida = new BResult();
				retSalida.setCode(-1);
				retSalida.setMessage("[ModuloBO] error en metodo listarModulo generador po:"+e.getMessage());
			}
		}
		return retSalida;
	}
	
	/**
	 * Metodo para obtener todos los modulos asociados a un perfil de usuario
	 * */
	public BResult getModulosxPerfil(DynaBean dyna) throws BusinessException{
		BResult 				retSalida		= null;
		ModuloDAO				moduloDAO		= null;
		try{
			conectar();
			moduloDAO	 	= new ModuloDAO(conn);
			retSalida 	= moduloDAO.getModulosxPerfil(dyna);
		}catch(Exception e){
			retSalida = new BResult();
			retSalida.setCode(-1);
			retSalida.setMessage("[ModuloBO] error en metodo getModulosxPerfil generado por:"+e.getMessage());
		}finally{
			try{
				desconectar();
			}catch(Exception e){
				retSalida = new BResult();
				retSalida.setCode(-1);
				retSalida.setMessage("[ModuloBO] error en metodo getModulosxPerfil generador po:"+e.getMessage());
			}
		}
		return retSalida;
	}
}
